#include <stdio.h>
#include <iostream>
#include <string.h>
/*
    int fputs(const char *s, FILE *stream);
    功能：将指定的字符串，写入到指定的文件中
    参数1：要被写入的字符串
    参数2：文件指针
    返回值：成功返回本次写入字符的个数，失败返回EOF

    char *fgets(char *s, int size, FILE *stream);
    功能：从stream指向的文件中最多读取size-1个字节到s容器中，遇到回车或文件结束，会结束一
         次读取，并且会将回车放入容器，最后自动加上一个字符串结束标识'\0'
    参数1：字符数组容器起始地址
    参数2：要读取的字符个数，最多读取size-1个字符
    参数3：文件指针
    返回值：成功返回容器s的起始地址，失败返回NULL
*/
int main(int argc, const char *argv[])
{
    // 打开文件
    FILE *fp = NULL;
    if ((fp = fopen("./file.txt", "w")) == NULL)
    {
        perror("fopen eror");
        return -1;
    }
    // 向文件中写入多个字符
    char wbuf[128] = ""; // 定义一个字符数组
    while (1)
    {
        std::cin >> wbuf; // 从终端输入一个字符串
        // 将上述字符串写入文件中
        fputs(wbuf, fp);
        fputc('\n', fp);
        if (strcmp(wbuf, "quit") == 0) // strcmp：比较两个字符串是否一致，如果相等则返回0
        {
            break;
        }
    }
    // 关闭文件
    fclose(fp);
    // 以只读的形式再次打开文件
    if ((fp = fopen("./file.txt", "r")) == NULL)
    {
        perror("fopen eror");
        return -1;
    }
    char rbuf[128] = "";
    while (1)
    {
        // 从文件中读取数据到rbuf容器中
        char *res = fgets(rbuf, sizeof(rbuf), fp);
        if (res == NULL)
            break;                   // 说明文件读取结束
        printf("rbuf = %s\n", rbuf); // 将数据打印到终端上
    }
    // 关闭文件
    fclose(fp);
    return 0;
}